package com.cgs.query.service

import com.cgs.query.domain.*
import io.swagger.annotations.ApiModelProperty
import org.springframework.http.ResponseEntity
import org.springframework.web.multipart.MultipartFile
import java.util.*

/**
 * 项目业务接口
 */
interface IQueryProjectService {

    fun insert(project: QueryProject): QueryProject

    fun save(project: QueryProject): QueryProject

    fun delete(name: String)

    fun findByName(name: String): QueryProject?

    fun findAll(): List<QueryProject>?

    fun findSourceByName(name: String): QuerySource?

    fun findBySourceId(sourceId: String): Set<QueryProject>?

    /**
     * 向项目中导入定义集合
     * 需要保证不重复
     */
    fun importDefines(projectName: String, defines: List<String>)

    /**
     * 向项目中导入标签
     * 需要保证不重复
     */
    fun importTag(projectName: String, alias: String, tagName: String)

    /**
     * 项目验证
     * 重名情况
     */
    fun validate(projectName: String): Map<String, Any>

    /**
     * 将其他的目拷入本项目
     */
    fun copy(targetProjectName: String, originProjectName: String)

    /**
     * 通过定义id查询项目
     */
    fun findByDefineId(defineId: String): Set<QueryProject>?

    /**
     * 根据锁定方式查询项目
     */
    fun findByLockType(lockType: String): Set<QueryProject>?

    /**
     * 通过定义id和版本号查询项目
     */
    fun findByDefineIdAndVersion(defineId: String, version: String): Set<QueryProject>?

    /**
     * 通过项目名称查询项目定义vo
     */
    fun findProjectDefineVoByProjectName(projectName: String): List<ProjectDefineVo>

    /**
     * 项目清空
     */
    fun clean(projectName: String)

    /**
     * 导入项目
     */
    fun import(file: MultipartFile)

    /**
     * 同步项目
     */
    fun sync(syncProject: SyncProject)

    /**
     * 导出项目
     */
    fun export(projectName: String): ResponseEntity<String>

    /**
     * 锁定项目为：锁定修改
     */
    fun lock(projectName: String)

}
